package create_thread;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

/*
目标：掌握线程的创建方式三：实现Callable接口
 */
public class ThreadTest3 {
    public static void main(String[] args) throws Exception {
        //创建一个Callable对象
        Callable<String> callable = new MyCallable(100);
        //封装成FutureTask对象
        //未来任务对象的作用？
        //1.是一个任务对象，实现了Runnable对象
        //2.可以在线程执行完毕之后，用未来任务对象调用get()方法获取线程执行完毕的结果
        FutureTask<String> f1 = new FutureTask<String>(callable);
        //把任务对象交给一个Thread对象执行
        new Thread(f1).start();

        //获取线程执行完毕后的结果
        //注意：如果执行到这，假如上面的线程还没有执行完毕
        //则此处会一直阻塞，直到线程执行完毕，才会获取结果
        String rs = f1.get();
        System.out.println("线程执行完毕后的结果：" + rs);

    }
}
